package com.hl.qzzpbackend.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hl.qzzpbackend.model.dto.companyInfo.CompanyInfoAddRequest;
import com.hl.qzzpbackend.model.dto.companyInfo.CompanyInfoUpdateRequest;
import com.hl.qzzpbackend.model.dto.companyInfo.CompanyQueryRequest;
import com.hl.qzzpbackend.model.entity.CompanyInfo;
import com.hl.qzzpbackend.model.entity.User;
import com.hl.qzzpbackend.model.enums.*;
import com.hl.qzzpbackend.model.vo.CompanyInfoVO;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;

/**
 * 公司信息 业务层
 *
 * @author helong
 */
public interface CompanyInfoService extends IService<CompanyInfo> {

    /**
     * 添加公司信息
     * @param companyInfoAddRequest 添加公司信息请求类
     * @return 是否成功
     */
    boolean companyInfoAdd(CompanyInfoAddRequest companyInfoAddRequest);

    /**
     * 参数校验
     * @param companySizeEnum 公司规模
     * @param companyTypeEnum 公司类型
     * @param fundingStageEnum 融资阶段
     * @param workDaysEnum 工作时间
     * @param overTimeEnum 加班时间
     * @param industryTypeId 行业类型id
     */
    void validate(CompanySizeEnum companySizeEnum,
                  CompanyTypeEnum companyTypeEnum,
                  FundingStageEnum fundingStageEnum,
                  WorkDaysEnum workDaysEnum,
                  OverTimeEnum overTimeEnum,
                  Long industryTypeId);

    /**
     * 修改公司信息
     * @param companyInfoUpdateRequest 添加公司信息请求类
     * @return 是否成功
     */
    boolean companyInfoUpdate(CompanyInfoUpdateRequest companyInfoUpdateRequest);

    /**
     * 获取公司信息
     * @param user 登录用户
     * @return 是否成功
     */
    CompanyInfoVO getInfo(User user);

    /**
     *
     * @param companyQueryRequest 公司信息查询请求
     * @return 公司信息查询条件构造器
     */
    LambdaQueryWrapper<CompanyInfo> getQueryWrapper(CompanyQueryRequest companyQueryRequest);

    /**
     * 获取公司信息列表
     * @param companyInfoList 公司信息列表
     * @return 公司信息列表
     */
    List<CompanyInfoVO> getCompanyInfoVOList(List<CompanyInfo> companyInfoList);

}
